package org.example.day05;

import java.util.Arrays;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO
 * 现有两组服务器A和B，每组有多个算力不同的CPU，其中A[i]是A组第i个CPU的运算能力，B[i]是B组第i个CPU的运算能力。<span>一组服务器的总算力是各CPU的算力之和。</span>为了让两组服务器的算力相等，允许从每组各选出一个CPU进行一次交换，求两组服务器中，用于交换的CPU的算力，并且要求从A组服务器中选出的CPU，算力尽可能小。
 *
 * 现有两组服务器A和B，每组有多个算力不同的CPU，其中A[i]是A组第i个CPU的运算能力，B[i]是B组第i个CPU的运算能力。
 * 一组服务器的总算力是各CPU的算力之和。为了让两组服务器的算力相等，允许从每组各选出一个CPU进行一次交换，求两组服务器中，
 * 用于交换的CPU的算力，并且要求从A组服务器中选出的CPU，算力尽可能小。
 * @date 2024/3/11 15:22
 */
public class test088 {
    // 寻找满足条件的CPU交换方案
    public static int[] findCPUExchange(int[] A, int[] B) {
        // 将A组和B组的CPU算力分别排序，方便查找
        Arrays.sort(A);
        Arrays.sort(B);

        int sumA = Arrays.stream(A).sum(); // A组的总算力
        int sumB = Arrays.stream(B).sum(); // B组的总算力
        int diff = sumA - sumB; // 计算两组算力之差

        // 从A组找出尽可能小的CPU算力，满足交换条件
        for (int a : A) {
            // 计算交换后的总差值
            int totalDiff = diff - 2 * a;
            // 如果总差值小于等于0，则找到满足条件的CPU
            if (totalDiff <= 0) {
                return new int[]{a, a + diff}; // 返回满足条件的CPU算力
            }
        }

        return new int[]{}; // 如果找不到满足条件的CPU，返回空数组
    }

    public static void main(String[] args) {
        int[] A = {1, 3, 5}; // A组的CPU算力
        int[] B = {2, 4, 6}; // B组的CPU算力

        int[] exchange = findCPUExchange(A, B);
        if (exchange.length == 2) {
            System.out.println("A组CPU算力：" + exchange[0] + "，B组CPU算力：" + exchange[1]);
        } else {
            System.out.println("无法找到满足条件的CPU交换方案。");
        }
    }
}
